#!/bin/bash
#这里可替换为你自己的执行程序的文件名
APP_NAME=jdk21-demo
#启动项目的路径
APP_PATH=./${APP_NAME}.jar
#输出日志的路径
LOG_PATH=./${APP_NAME}.log

#使用说明，用来提示输入参数
usage() {
  echo "Usage: sh service.sh [start|stop|restart|status]"
  exit 1
}

#检查程序是否在运行
is_exist() {
  pid=$(ps -ef | grep $APP_NAME.jar | grep -v grep | awk '{print $2}')
  #如果不存在返回1，存在返回0
  if [ -z "${pid}" ]; then
    return 1
  else
    return 0
  fi
}

#启动方法
start() {
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    # 执行jar的命令,nohup表示永久运行。&表示后台运行
    # --server.port=8001 设置端口
    # -Xms 为jvm启动时分配的内存
    # -Xmx 为jvm运行过程中分配的最大内存
    # Xss 为jvm启动的每个线程分配的内存大小 默认JDK1.4中是256K，JDK1.5+中是1M
    JAVA_OPTS="-server -Xms128m -Xmx256m -Xss1024k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxGCPauseMillis=500 -XX:+UseG1GC -Xloggc:./jdk21-demo-gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:-OmitStackTraceInFastThrow -XX:MinHeapFreeRatio=30 -XX:MaxHeapFreeRatio=50 "
    # nohup java -jar ${APP_PATH} --server.port=8080 >> ${LOG_PATH} 2>&1 &
    # nohup java -jar ${APP_PATH} --server.port=8080 >> ${LOG_PATH} 2>&1 &
    nohup /root/tools/openlogic-openjdk-21.0.7+6-linux-x64/bin/java -jar -Dspring.profiles.active=local ${APP_PATH} $JAVA_OPTS --server.port=8083 >${LOG_PATH} 2>&1 &

    echo "${APP_NAME} start success"
  fi
}

#停止方法
stop() {
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
    echo "${APP_NAME} stop success"
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status() {
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is not running."
  fi
}

#重启
restart() {
  stop
  sleep 3
  start
  echo "${APP_NAME} restart success"
}

#根据输入参数，选择执行对应方法，不输入则执行使用说明
case "$1" in
"start")
  start
  ;;
"stop")
  stop
  ;;
"status")
  status
  ;;
"restart")
  restart
  ;;
*)
  usage
  ;;
esac
